package com.zsrt.java.day20161227.wrl.demo07;

public class ArrayUtil {
	
	/**
	 * 方法的设计：
	 * 已知：
	 * 		1.有1个数组：arrays
	 * 		2.有1个需要查询的数字：9
	 * 求：查找的数字对应的下标 ：3
	 * 
	 * 分析： 循环遍历整个数组，获取元素跟 9 比较
	 * 		 相同：找到了，结束循环
	 * 		 不同：接着往下找
	 * 	如果找不到，返回-1
	 * @param arrays	数组
	 * @param search	需要查询的参数
	 * @return	参数的下标
	 */
	public static int query(int[] arrays, int search){
		
		//如果找不到，返回-1
		int index = -1;
		for(int i = 0;i<arrays.length;i++){
			if(search == arrays[i]){
				index = i;
				//后面没有程序 ，注意写上break结束运行
				break;
			}
		}
		return index;
	}

	/**
	 * * 已知：
	 * 		1 原来的数组
	 * 		2 被更新的参数
	 * 		3 更新的数
	 * 求：更新后的数组
	 * 
	 * 分析：
	 * 	1 遍历数组，获取元素跟被更新参数比较
	 * 		相同：更新参数，退出
	 * 		不同：继续找
	 * 	2返回新数组
	 * @param oldArrays	原来的数组
	 * @param oldData	被更新的参数
	 * @param newData	更新的参数
	 * @return	更新后的数组
	 */
	public static int[] update(int[] oldArrays,int oldData,int newData){
		//1 遍历数组，获取元素跟被更新参数比较
		int index = query(oldArrays, oldData);
		oldArrays[index] = newData;
		return oldArrays;
	}
	
	/**
	 * 删除
	 * 	已知： 
	 * 		1： 原来的数组
	 * 		2： 被删除的数
	 * 	求：
	 * 		删除指定的参数后，得到的新数组  //规矩：数组的长度一旦确定，不能修改 
	 * 思路：
	 *  注意：先创建1个数组  数组长度是原来数组的长度-1
	 * 		1：获取 被删除的数 的下标 index
	 * 		2：以下标为基准 把 原来的数组 分为2部分
	 * 			2.1 在index之 前   原样复制到  新的数组中
	 * 			2.1  在index之 后   把index+1 复制 到新数组的index
	 *  	3：返回新的数组
	 * 
	 */
	public static int[] delete(int[] oldArrays,int num){
		int len	 = oldArrays.length;
		int[] newArrays = new int[len-1];
		
		//获取被删除参数的下标
		int index = query(oldArrays, num);
		for(int i = 0;i<index;i++){
			newArrays[i] = oldArrays[i];
		}
		for(int i = index; i < len-1; i++){
			newArrays[i] = oldArrays[i+1];
		}
		return newArrays;
	}
	
	
	
	/**
	 * * 添加元素
	 * 已知：
	 * 		1.原来的数组
	 * 		2.被添加的元素
	 * 		3，插入元素在数组中的位置
	 * 求：添加完元素后的新数组
	 * 分析：
	 * 	1 造一个新数组，类型一样，数组长度是原来的长度+1
	 *  2 把元素插进新数组的位置
	 *  
	 * @param oldArrays	原来的数组
	 * @param num	被添加的元素
	 * @param index 插入元素在数组中的位置
	 * @return
	 */
	public static int[] add(int[] oldArrays,int num,int index){
		int len = oldArrays.length;
		
		//1 造一个新数组，类型一样，数组长度是原来的长度+1
		int[] newArrays = new int[len+1];
		
		//2 把原来的数组中的值依次复制过来，循环
		for(int i = 0;i<index-1;i++){
			//把元素放进新数组
			newArrays[i] = oldArrays[i];
		}
		
		//插入新元素
		newArrays[index-1] = num;
		for(int i = index; i < len+1; i++){
			newArrays[i] = oldArrays[i-1];
		}
		return newArrays;
	}

}
